/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.cip.esymons.eventos.bc;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Vector;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import org.cip.esymons.eventos.be.DetalleIngresosEventos;
import org.cip.esymons.eventos.be.Preevento;
import org.cip.esymons.eventos.be.RangoMatriculas;

/**
 *
 * @author oscar
 */
@Stateless
public class DetalleIngresosEventosFacade implements DetalleIngresosEventosFacadeLocal {

    @PersistenceContext
    private EntityManager em;

    public void create(DetalleIngresosEventos detalleIngresosEventos) {
        em.persist(detalleIngresosEventos);
    }

    public void edit(DetalleIngresosEventos detalleIngresosEventos) {
        em.merge(detalleIngresosEventos);
    }

    public void remove(DetalleIngresosEventos detalleIngresosEventos) {
        em.remove(em.merge(detalleIngresosEventos));
    }

    public DetalleIngresosEventos find(Object id) {
        return em.find(DetalleIngresosEventos.class, id);
    }

    public List<DetalleIngresosEventos> findAll() {
        return em.createQuery("select object(o) from DetalleIngresosEventos as o").getResultList();
    }

    public List<DetalleIngresosEventos> listarPorEvento(Preevento preEventoSeleccionado) {
        return em.createQuery("select object(o) from DetalleIngresosEventos as o where o.preCodigo=?1").setParameter(1, preEventoSeleccionado).getResultList();
    }

    public void eliminarPorEvento(Preevento preEventoSeleccionado) {
        em.createNativeQuery("delete from eca_detalle_ingresos  where pre_codigo=?1").setParameter(1, preEventoSeleccionado.getPreCodigo());
    }

    public List<RangoMatriculas> listarRangos(Preevento preEventoSeleccionado) {
        Vector v = new Vector();
        List<RangoMatriculas> listaRang = new ArrayList<RangoMatriculas>();
        v = (Vector) em.createNativeQuery("select din_fechaInicio,din_fechaFin from eca_detalle_ingresos where pre_codigo=?1 group by din_fechaInicio").setParameter(1, preEventoSeleccionado.getPreCodigo()).getResultList();
        for (int i = 0; i < v.size(); i++) {
            RangoMatriculas r = new RangoMatriculas();
            r.setFechaIni(((Date) (((Vector) (v.elementAt(i))).get(0))));
            r.setFechaFin(((Date) (((Vector) (v.elementAt(i))).get(1))));
            r.setInd(i + 1);
            listaRang.add(r);
        }
        return listaRang;
    }

    public Double retornarMonto(Integer tpeCodigo, Integer tpiCodigo, Date fechaIni, Integer preCodigo) {
        Double d = 0.0;
        Vector v = new Vector();
        try {
            v = (Vector) em.createNativeQuery("select din_monto from eca_detalle_ingresos where pre_codigo=?4 and din_fechaInicio=?3 and tpe_codigo=?1 and tpi_codigo=?2")
                    .setParameter(1, tpeCodigo)
                    .setParameter(2, tpiCodigo)
                    .setParameter(3, fechaIni)
                    .setParameter(4, preCodigo)
                    .getSingleResult();
            d = (((Double) v.get(0)).doubleValue());
        } catch (Exception e) {
            System.out.println("FATAL: " + e.getMessage());
        }
        return d;
    }

    //hecho por lizardo
    public Double retornarUltimoMonto(Integer tpeCodigo, Integer tpiCodigo, Date fechaIni, Integer preCodigo) {
        Double d = 0.0;
        Vector v = new Vector();
        try {
            v = (Vector) em.createNativeQuery("call sp_recuperar_montos (?,?,?,?);")
                    .setParameter(1, preCodigo)
                    .setParameter(2, fechaIni)
                    .setParameter(3, tpeCodigo)
                    .setParameter(4, tpiCodigo)
                    .getSingleResult();
            d = (((Double) v.get(0)).doubleValue());
        } catch (Exception e) {
            System.out.println("FATAL: " + e.getMessage());
        }
        return d;
    }

    public Integer retornarNroCuotas(Integer tpiCodigo, Integer preCodigo) {
        Integer d = 0;
        Vector v = new Vector();
        try {
            v = (Vector) em.createNativeQuery("select nroCuotas from eca_detalle_ingresos where pre_codigo=?2 and tpi_codigo=?1 limit 1").setParameter(1, tpiCodigo).setParameter(2, preCodigo).getSingleResult();
            d = (((Integer) v.get(0)).intValue());
        } catch (Exception e) {
        }
        return d;
    }
}
